#include "gbUsb/gbUDisk.h"

#include "gbUsb/gbIUsb.h"
#include "glib.h"

static void gb_iusb_interface_init(GBIUsbInterface *iface);

G_DEFINE_TYPE_WITH_CODE(GBUDisk, gb_udisk, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(GB_TYPE_IUSB, gb_iusb_interface_init));

static void gb_udisk_init(GBUDisk *self) {
    self->data = g_string_new(NULL);
}

static void gb_udisk_class_init(GBUDiskClass *self) {
}

static gchar *gb_udisk_read(GBIUsb *iusb) {
    GBUDisk *udisk = GB_UDISK(iusb);
    return udisk->data->str;
}

static void gb_udisk_write(GBIUsb *iusb, const gchar *str) {
    GBUDisk *udisk = GB_UDISK(iusb);
    g_string_assign(udisk->data, str);
}

// 表明已实现IUSB接口
static void gb_iusb_interface_init(GBIUsbInterface *iface) {
    iface->read  = gb_udisk_read;
    iface->write = gb_udisk_write;
}